package com.xuetang.service;

import com.xuetang.entity.CommunityComment;
import com.xuetang.entity.CommunityPost;

import java.util.List;
import java.util.Map;

/**
 * 社区服务接口
 */
public interface CommunityService {

    /**
     * 分页查询帖子列表
     * 
     * @param page     页码
     * @param pageSize 每页条数
     * @param tagId    标签ID
     * @param userId   当前用户ID
     * @return 分页数据
     */
    Map<String, Object> listPosts(int page, int pageSize, Integer tagId, Long userId);

    /**
     * 获取帖子详情
     * 
     * @param id     帖子ID
     * @param userId 当前用户ID
     * @return 帖子详情
     */
    CommunityPost getPostDetail(Long id, Long userId);

    /**
     * 创建帖子
     * 
     * @param post   帖子信息
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean createPost(CommunityPost post, Long userId);

    /**
     * 更新帖子
     * 
     * @param post 帖子信息
     * @return 是否成功
     */
    boolean updatePost(CommunityPost post);

    /**
     * 删除帖子
     * 
     * @param id 帖子ID
     * @return 是否成功
     */
    boolean deletePost(Long id);

    /**
     * 添加评论
     * 
     * @param comment 评论信息
     * @param userId  用户ID
     * @return 是否成功
     */
    CommunityComment addComment(CommunityComment comment, Long userId);

    /**
     * 删除评论
     * 
     * @param id 评论ID
     * @return 是否成功
     */
    boolean deleteComment(Long id);

    /**
     * 点赞/取消点赞帖子
     * 
     * @param postId 帖子ID
     * @param userId 用户ID
     * @param isLike 是否点赞
     * @return 是否成功
     */
    boolean likePost(Long postId, Long userId, boolean isLike);

    /**
     * 点赞/取消点赞评论
     * 
     * @param commentId 评论ID
     * @param userId    用户ID
     * @param isLike    是否点赞
     * @return 是否成功
     */
    boolean likeComment(Long commentId, Long userId, boolean isLike);

    /**
     * 获取最近的帖子列表（用于后台管理系统）
     * 
     * @param limit 条数
     * @return 帖子列表
     */
    List<CommunityPost> getRecentPosts(int limit);

    /**
     * 获取最近的评论列表（用于后台管理系统）
     * 
     * @param limit 条数
     * @return 评论列表
     */
    List<CommunityComment> getRecentComments(int limit);

    /**
     * 根据ID获取评论
     * 
     * @param id 评论ID
     * @return 评论信息
     */
    CommunityComment getCommentById(Long id);

    /**
     * 更新评论
     * 
     * @param comment 评论信息
     * @return 是否成功
     */
    boolean updateComment(CommunityComment comment);
}